Style Content
MGLSource
@interface MGLSource : NSObject
MGLSource is an abstract base class for map content sources. A map content
source supplies content to be shown on the map. A source is added to an
MGLStyle object along with an
MGLForegroundStyleLayer
object. The
foreground style layer defines the appearance of any content supplied by the
source.
Each source defined by the style JSON file is represented at runtime by an
MGLSource object that you can use to refine the map’s content. You can also
add and remove sources dynamically using methods such as
-[MGLStyle addSource:]
and
-[MGLStyle sourceWithIdentifier:].
Create instances of MGLShapeSource,
MGLComputedShapeSource,
MGLImageSource, and the concrete
subclasses of MGLTileSource
(MGLVectorTileSource and
MGLRasterTileSource) in order to
use MGLSource’s
properties and methods. Do not create instances of MGLSource directly, and do
not create your own subclasses of this class.
Initializing a Source
-
-initWithIdentifier:
Returns a source initialized with an identifier.
After initializing and configuring the source, add it to a map view’s style using the
-[MGLStyle addSource:]method.Declaration
Objective-C
- (nonnull instancetype)initWithIdentifier:(nonnull NSString *)identifier;Swift
init(identifier: String)Parameters
identifierA string that uniquely identifies the source in the style to which it is added.
Return Value
An initialized source.
Identifying a Source
-
identifier
A string that uniquely identifies the source in the style to which it is added.
Declaration
Objective-C
@property (nonatomic, copy) NSString *_Nonnull identifier;Swift
var identifier: String { get set }
MGLShapeSource
@interface MGLShapeSource : MGLSource
MGLShapeSource is a map content source that supplies vector shapes to be
shown on the map. The shapes may be instances of
MGLShape or
MGLFeature,
or they may be defined by local or external
GeoJSON code. A shape source is added to an
MGLStyle object along with an
MGLVectorStyleLayer object. The
vector style
layer defines the appearance of any content supplied by the shape source. You
can update a shape source by setting its shape or URL property.
MGLShapeSource is optimized for data sets that change dynamically and fit
completely in memory. For large data sets that do not fit completely in memory,
use the MGLComputedShapeSource
or MGLVectorTileSource class.
Each
geojson
source defined by the style JSON file is represented at runtime by an
MGLShapeSource object that you can use to refine the map’s content and
initialize new style layers. You can also add and remove sources dynamically
using methods such as
-[MGLStyle addSource:]
and
-[MGLStyle sourceWithIdentifier:].
Any vector style layer initialized with a shape source should have a nil
value in its sourceLayerIdentifier property.
Example
var coordinates: [CLLocationCoordinate2D] = [
CLLocationCoordinate2D(latitude: 37.77, longitude: -122.42),
CLLocationCoordinate2D(latitude: 38.91, longitude: -77.04),
]
let polyline = MGLPolylineFeature(coordinates: &coordinates, count: UInt(coordinates.count))
let source = MGLShapeSource(identifier: "lines", features: [polyline], options: nil)
mapView.style?.addSource(source)
Related examples
See the Cluster point data,
Use images to
cluster point data, and Add
live data examples to learn how to add data to your map using this
MGLSource object.
Initializing a Source
-
-initWithIdentifier:URL:options:
Returns a shape source with an identifier, URL, and dictionary of options for the source.
This class supports the following options:
MGLShapeSourceOptionClustered,MGLShapeSourceOptionClusterRadius,MGLShapeSourceOptionMaximumZoomLevelForClustering,MGLShapeSourceOptionMinimumZoomLevel,MGLShapeSourceOptionMaximumZoomLevel,MGLShapeSourceOptionBuffer, andMGLShapeSourceOptionSimplificationTolerance. Shapes provided by a shape source are not clipped or wrapped automatically.Related examples
See the Add live data example to learn how to add live data to your map by updating the an
MGLShapeSourceobject’sURLproperty.Declaration
Objective-C
- (nonnull instancetype) initWithIdentifier:(nonnull NSString *)identifier URL:(nonnull NSURL *)url options: (nullable NSDictionary<MGLShapeSourceOption, id> *)options;Swift
init(identifier: String, url: URL, options: [MGLShapeSourceOption : Any]? = nil)Parameters
identifierA string that uniquely identifies the source.
urlAn HTTP(S) URL, absolute file URL, or local file URL relative to the current application’s resource bundle.
optionsAn
NSDictionaryof options for this source.Return Value
An initialized shape source.
-
-initWithIdentifier:shape:options:
Returns a shape source with an identifier, a shape, and dictionary of options for the source.
This class supports the following options:
MGLShapeSourceOptionClustered,MGLShapeSourceOptionClusterRadius,MGLShapeSourceOptionMaximumZoomLevelForClustering,MGLShapeSourceOptionMinimumZoomLevel,MGLShapeSourceOptionMaximumZoomLevel,MGLShapeSourceOptionBuffer, andMGLShapeSourceOptionSimplificationTolerance. Shapes provided by a shape source are not clipped or wrapped automatically.To specify attributes about the shape, use an instance of an
MGLShapesubclass that conforms to theMGLFeatureprotocol, such asMGLPointFeature. To include multiple shapes in the source, use anMGLShapeCollectionorMGLShapeCollectionFeatureobject, or use the-initWithIdentifier:features:options:or-initWithIdentifier:shapes:options:methods.To create a shape from GeoJSON source code, use the
+[MGLShape shapeWithData:encoding:error:]method.Related examples
See the Animate a line example to learn how to animate line data by continously updating an
MGLShapeSource‘sshapeattribute.Declaration
Objective-C
- (nonnull instancetype) initWithIdentifier:(nonnull NSString *)identifier shape:(nullable MGLShape *)shape options: (nullable NSDictionary<MGLShapeSourceOption, id> *)options;Swift
init(identifier: String, shape: MGLShape?, options: [MGLShapeSourceOption : Any]? = nil)Parameters
identifierA string that uniquely identifies the source.
shapeA concrete subclass of
MGLShapeoptionsAn
NSDictionaryof options for this source.Return Value
An initialized shape source.
-
-initWithIdentifier:features:options:
Returns a shape source with an identifier, an array of features, and a dictionary of options for the source.
This class supports the following options:
MGLShapeSourceOptionClustered,MGLShapeSourceOptionClusterRadius,MGLShapeSourceOptionMaximumZoomLevelForClustering,MGLShapeSourceOptionMinimumZoomLevel,MGLShapeSourceOptionMaximumZoomLevel,MGLShapeSourceOptionBuffer, andMGLShapeSourceOptionSimplificationTolerance. Shapes provided by a shape source are not clipped or wrapped automatically.Unlike
-initWithIdentifier:shapes:options:, this method acceptsMGLFeatureinstances, such asMGLPointFeatureobjects, whose attributes you can use when applying a predicate toMGLVectorStyleLayeror configuring a style layer’s appearance.To create a shape from GeoJSON source code, use the
+[MGLShape shapeWithData:encoding:error:]method.Declaration
Objective-C
- (nonnull instancetype) initWithIdentifier:(nonnull NSString *)identifier features:(nonnull NSArray<MGLShape<MGLFeature> *> *)features options: (nullable NSDictionary<MGLShapeSourceOption, id> *)options;Parameters
identifierA string that uniquely identifies the source.
featuresAn array of objects that conform to the MGLFeature protocol.
optionsAn
NSDictionaryof options for this source.Return Value
An initialized shape source.
-
-initWithIdentifier:shapes:options:
Returns a shape source with an identifier, an array of shapes, and a dictionary of options for the source.
This class supports the following options:
MGLShapeSourceOptionClustered,MGLShapeSourceOptionClusterRadius,MGLShapeSourceOptionMaximumZoomLevelForClustering,MGLShapeSourceOptionMinimumZoomLevel,MGLShapeSourceOptionMaximumZoomLevel,MGLShapeSourceOptionBuffer, andMGLShapeSourceOptionSimplificationTolerance. Shapes provided by a shape source are not clipped or wrapped automatically.Any
MGLFeatureinstance passed into this initializer is treated as an ordinary shape, causing any attributes to be inaccessible to anMGLVectorStyleLayerwhen evaluating a predicate or configuring certain layout or paint attributes. To preserve the attributes associated with each feature, use the-initWithIdentifier:features:options:method instead.To create a shape from GeoJSON source code, use the
+[MGLShape shapeWithData:encoding:error:]method.Declaration
Objective-C
- (nonnull instancetype) initWithIdentifier:(nonnull NSString *)identifier shapes:(nonnull NSArray<MGLShape *> *)shapes options: (nullable NSDictionary<MGLShapeSourceOption, id> *)options;Swift
convenience init(identifier: String, shapes: [MGLShape], options: [MGLShapeSourceOption : Any]? = nil)Parameters
identifierA string that uniquely identifies the source.
shapesAn array of shapes; each shape is a member of a concrete subclass of MGLShape.
optionsAn
NSDictionaryof options for this source.Return Value
An initialized shape source.
Accessing a Source’s Content
-
shape
The contents of the source. A shape can represent a GeoJSON geometry, a feature, or a collection of features.
If the receiver was initialized using
-initWithIdentifier:URL:options:, this property is set tonil. This property is unavailable until the receiver is passed into-[MGLStyle addSource:].You can get/set the shapes within a collection via this property. Actions must be performed on the application’s main thread.
-
URL
The URL to the GeoJSON document that specifies the contents of the source.
If the receiver was initialized using
-initWithIdentifier:shape:options:, this property is set tonil.Declaration
Objective-C
@property (nonatomic, copy, nullable) NSURL *URL;Swift
var url: URL? { get set } -
-featuresMatchingPredicate:
Returns an array of map features for this source, filtered by the given predicate.
Each object in the returned array represents a feature for the current style and provides access to attributes specified via the
shapeproperty.Features come from tiled GeoJSON data that is converted to tiles internally, so feature geometries are clipped at tile boundaries and features may appear duplicated across tiles. For example, suppose this source contains a long polyline representing a road. The resulting array includes those parts of the road that lie within the map tiles that the source has loaded, even if the road extends into other tiles. The portion of the road within each map tile is included individually.
Returned features may not necessarily be visible to the user at the time they are loaded: the style may lack a layer that draws the features in question. To obtain only visible features, use the
-[MGLMapView visibleFeaturesAtPoint:inStyleLayersWithIdentifiers:predicate:]or-[MGLMapView visibleFeaturesInRect:inStyleLayersWithIdentifiers:predicate:]method.Declaration
Objective-C
- (nonnull NSArray<id<MGLFeature>> *)featuresMatchingPredicate: (nullable NSPredicate *)predicate;Parameters
predicateA predicate to filter the returned features. Use
nilto include all features in the source.Return Value
An array of objects conforming to the
MGLFeatureprotocol that represent features in the source that match the predicate. -
-leavesOfCluster:offset:limit:
Returns an array of map features that are the leaves of the specified cluster. (“Leaves” are the original points that belong to the cluster.)
This method supports pagination; you supply an offset (number of features to skip) and a maximum number of features to return.
Declaration
Objective-C
- (nonnull NSArray<id<MGLFeature>> *) leavesOfCluster:(nonnull MGLPointFeatureCluster *)cluster offset:(NSUInteger)offset limit:(NSUInteger)limit;Parameters
clusterAn object of type
MGLPointFeatureCluster(that conforms to theMGLClusterprotocol).offsetNumber of features to skip.
limitThe maximum number of features to return
Return Value
An array of objects that conform to the
MGLFeatureprotocol. -
-childrenOfCluster:
Returns an array of map features that are the immediate children of the specified cluster on the next zoom level. The may include features that also conform to the
MGLClusterprotocol (currently only objects of typeMGLPointFeatureCluster).Note
The returned array may contain the
clusterthat was passed in, if the next zoom level doesn’t match the zoom level for expanding that cluster. See-[MGLShapeSource zoomLevelForExpandingCluster:].Declaration
Objective-C
- (nonnull NSArray<id<MGLFeature>> *)childrenOfCluster: (nonnull MGLPointFeatureCluster *)cluster;Parameters
clusterAn object of type
MGLPointFeatureCluster(that conforms to theMGLClusterprotocol).Return Value
An array of objects that conform to the
MGLFeatureprotocol. -
-zoomLevelForExpandingCluster:
Returns the zoom level at which the given cluster expands.
Declaration
Objective-C
- (double)zoomLevelForExpandingCluster: (nonnull MGLPointFeatureCluster *)cluster;Swift
func zoomLevel(forExpanding cluster: MGLPointFeatureCluster) -> DoubleParameters
clusterAn object of type
MGLPointFeatureCluster(that conforms to theMGLClusterprotocol).Return Value
Zoom level. This should be >= 0; any negative return value should be considered an error.
MGLComputedShapeSource
@interface MGLComputedShapeSource : MGLSource
MGLComputedShapeSource is a map content source that supplies vector shapes,
one tile at a time, to be shown on the map on demand. You implement a class
conforming to the
MGLComputedShapeSourceDataSource
protocol that returns
instances of MGLShape or
MGLFeature, then add a computed shape
source to an
MGLStyle object along with an
MGLVectorStyleLayer object. The
vector style
layer defines the appearance of any content supplied by the computed shape
source.
MGLComputedShapeSource is similar to
MGLShapeSource but is optimized for
data sets that change dynamically or are too large to fit completely in memory.
It is also useful for data that is divided into tiles in a format other than
Mapbox Vector Tiles. For
GeoJSON data, use the
MGLShapeSource class.
For static tiles or Mapbox Vector Tiles, use the
MGLVectorTileSource class.
You can add and remove sources dynamically using methods such as
-[MGLStyle addSource:]
and
-[MGLStyle sourceWithIdentifier:].
This class
cannot be represented in a style JSON file; you must add it ot the style at
runtime.
-
-initWithIdentifier:options:
Returns a custom shape data source initialized with an identifier, and a dictionary of options for the source according to the style specification.
This class supports the following options:
MGLShapeSourceOptionMinimumZoomLevel,MGLShapeSourceOptionMaximumZoomLevel,MGLShapeSourceOptionBuffer,MGLShapeSourceOptionSimplificationTolerance,MGLShapeSourceOptionWrapsCoordinates, andMGLShapeSourceOptionClipsCoordinates. Shapes provided by a computed shape source cannot be clustered.Declaration
Objective-C
- (nonnull instancetype) initWithIdentifier:(nonnull NSString *)identifier options: (nullable NSDictionary<MGLShapeSourceOption, id> *)options;Swift
init(identifier: String, options: [MGLShapeSourceOption : Any]? = nil)Parameters
identifierA string that uniquely identifies the source.
optionsAn
NSDictionaryof options for this source. -
-initWithIdentifier:dataSource:options:
Returns a custom shape data source initialized with an identifier, data source, and a dictionary of options for the source according to the style specification.
This class supports the following options:
MGLShapeSourceOptionMinimumZoomLevel,MGLShapeSourceOptionMaximumZoomLevel,MGLShapeSourceOptionBuffer,MGLShapeSourceOptionSimplificationTolerance,MGLShapeSourceOptionWrapsCoordinates, andMGLShapeSourceOptionClipsCoordinates. Shapes provided by a computed shape source cannot be clustered.Declaration
Objective-C
- (nonnull instancetype) initWithIdentifier:(nonnull NSString *)identifier dataSource:(nonnull id<MGLComputedShapeSourceDataSource>)dataSource options: (nullable NSDictionary<MGLShapeSourceOption, id> *)options;Swift
convenience init(identifier: String, dataSource: MGLComputedShapeSourceDataSource, options: [MGLShapeSourceOption : Any]? = nil)Parameters
identifierA string that uniquely identifies the source.
optionsAn
NSDictionaryof options for this source. -
-invalidateBounds:
Invalidates all the features and properties intersecting with or contained in the specified bounds. New fetch requests will immediately be invoked on the
MGLComputedShapeSourceDataSource.Declaration
Objective-C
- (void)invalidateBounds:(MGLCoordinateBounds)bounds;Swift
func invalidateBounds(_ bounds: MGLCoordinateBounds)Parameters
boundsCoordinate bounds to invalidate.
-
-invalidateTileAtX:y:zoomLevel:
Invalidates all the feautres and properties of a given tile. A new fetch request will immediately be invoked on the
MGLComputedShapeSourceDataSource.Declaration
Objective-C
- (void)invalidateTileAtX:(NSUInteger)x y:(NSUInteger)y zoomLevel:(NSUInteger)zoomLevel;Swift
func invalidateTileAt(x: UInt, y: UInt, zoomLevel: UInt)Parameters
xTile X coordinate.
yTile Y coordinate.
zoomLevelTile zoom level.
-
-setFeatures:inTileAtX:y:zoomLevel:
Set a new set of features for a tile. This method can be invkoed from background threads. For best performance, use this method only to update tiles that have already been requested through
MGLComputedShapeSourceDataSource.Declaration
Objective-C
- (void)setFeatures:(nonnull NSArray<MGLShape<MGLFeature> *> *)features inTileAtX:(NSUInteger)x y:(NSUInteger)y zoomLevel:(NSUInteger)zoomLevel;Parameters
featuresFeatures for the tile.
xTile X coordinate.
yTile Y coordinate.
zoomLevelTile zoom level.
-
dataSource
An object that implements the
MGLComputedShapeSourceDataSourceprotocol that will be queried for tile data.Declaration
Objective-C
@property (nonatomic, weak, nullable) id<MGLComputedShapeSourceDataSource> dataSource;Swift
weak var dataSource: MGLComputedShapeSourceDataSource? { get set } -
requestQueue
A queue that calls to the data source will be made on.
Declaration
Objective-C
@property (nonatomic, readonly) NSOperationQueue *_Nonnull requestQueue;Swift
var requestQueue: OperationQueue { get }
MGLTileSource
@interface MGLTileSource : MGLSource
MGLTileSource is a map content source that supplies map tiles to be shown on
the map. The location of and metadata about the tiles are defined either by an
option dictionary or by an external file that conforms to the
TileJSON specification.
A tile source is added to an MGLStyle object
along with one or more
MGLRasterStyleLayer or
MGLVectorStyleLayer objects. Use
a style layer to
control the appearance of content supplied by the tile source.
A tile source is also known as a tile set. To learn about the structure of a Mapbox-hosted tile set, view it in Mapbox Studio’s Tilesets editor.
Create instances of
MGLRasterTileSource and
MGLVectorTileSource in order
to use MGLTileSource‘s properties and methods. Do not create instances of
MGLTileSource directly, and do not create your own subclasses of this class.
Accessing a Source’s Content
-
configurationURL
The URL to the TileJSON configuration file that specifies the contents of the source.
If the receiver was initialized using
-initWithIdentifier:tileURLTemplates:options, this property is set tonil.Declaration
Objective-C
@property (nonatomic, copy, readonly, nullable) NSURL *configurationURL;Swift
var configurationURL: URL? { get }
Accessing Attribution Strings
-
attributionInfos
An array of
MGLAttributionInfoobjects that define the attribution statements to be displayed when the map is shown to the user.By default, this array is empty. If the source is initialized with a configuration URL, this array is also empty until the configuration JSON file is loaded.
Declaration
Objective-C
@property (nonatomic, copy, readonly) NSArray<MGLAttributionInfo *> *_Nonnull attributionInfos;Swift
var attributionInfos: [MGLAttributionInfo] { get }
MGLRasterTileSource
@interface MGLRasterTileSource : MGLTileSource
MGLRasterTileSource is a map content source that supplies raster image tiles
to be shown on the map. The location of and metadata about the tiles are
defined either by an option dictionary or by an external file that conforms to
the
TileJSON specification.
A raster tile source is added to an MGLStyle
object along with one or more
MGLRasterStyleLayer objects. Use
a raster style layer to control the
appearance of content supplied by the raster tile source.
Each
raster
source defined by the style JSON file is represented at runtime by an
MGLRasterTileSource object that you can use to initialize new style layers. You
can also add and remove sources dynamically using methods such as
-[MGLStyle addSource:]
and
-[MGLStyle sourceWithIdentifier:].
Example
let source = MGLRasterTileSource(identifier: "clouds", tileURLTemplates: ["https://example.com/raster-tiles/{z}/{x}/{y}.png"], options: [
.minimumZoomLevel: 9,
.maximumZoomLevel: 16,
.tileSize: 512,
.attributionInfos: [
MGLAttributionInfo(title: NSAttributedString(string: "© Mapbox"), url: URL(string: "https://mapbox.com"))
]
])
mapView.style?.addSource(source)
Related examples
See the
Add raster imagery example to learn how to add a
MGLRasterStyleLayer
to your map using an MGLRasterTileSource.
Initializing a Source
-
-initWithIdentifier:configurationURL:
Returns a raster tile source initialized with an identifier and configuration URL.
After initializing and configuring the source, add it to a map view’s style using the
-[MGLStyle addSource:]method.The URL may be a full HTTP or HTTPS URL or canonical URL. The URL should point to a JSON file that conforms to the TileJSON specification.
If a Mapbox URL is specified, this source uses a tile size of 256. For all other tilesets, the default value is 512. (See the
MGLTileSourceOptionTileSizedocumentation for more information about tile sizes.) If you need to use a tile size other than the default, use the-initWithIdentifier:configurationURL:tileSize:method.Declaration
Objective-C
- (nonnull instancetype)initWithIdentifier:(nonnull NSString *)identifier configurationURL:(nonnull NSURL *)configurationURL;Swift
convenience init(identifier: String, configurationURL: URL)Parameters
identifierA string that uniquely identifies the source in the style to which it is added.
configurationURLA URL to a TileJSON configuration file describing the source’s contents and other metadata.
Return Value
An initialized raster tile source.
-
-initWithIdentifier:configurationURL:tileSize:
Returns a raster tile source initialized with an identifier, configuration URL, and tile size.
After initializing and configuring the source, add it to a map view’s style using the
-[MGLStyle addSource:]method.The URL may be a full HTTP or HTTPS URL or, canonical URL. The URL should point to a JSON file that conforms to the TileJSON specification.
Declaration
Objective-C
- (nonnull instancetype)initWithIdentifier:(nonnull NSString *)identifier configurationURL:(nonnull NSURL *)configurationURL tileSize:(CGFloat)tileSize;Swift
init(identifier: String, configurationURL: URL, tileSize: CGFloat)Parameters
identifierA string that uniquely identifies the source in the style to which it is added.
configurationURLA URL to a TileJSON configuration file describing the source’s contents and other metadata.
tileSizeThe width and height (measured in points) of each tiled image in the raster tile source. See the
MGLTileSourceOptionTileSizedocumentation for details.Return Value
An initialized raster tile source.
-
-initWithIdentifier:tileURLTemplates:options:
Returns a raster tile source initialized an identifier, tile URL templates, and options.
Tile URL templates are strings that specify the URLs of the raster tile images to load. See the “Tile URL Templates” guide for information about the format of a tile URL template.
After initializing and configuring the source, add it to a map view’s style using the
-[MGLStyle addSource:]method.Declaration
Objective-C
- (nonnull instancetype) initWithIdentifier:(nonnull NSString *)identifier tileURLTemplates:(nonnull NSArray<NSString *> *)tileURLTemplates options: (nullable NSDictionary<MGLTileSourceOption, id> *)options;Swift
init(identifier: String, tileURLTemplates: [String], options: [MGLTileSourceOption : Any]? = nil)Parameters
identifierA string that uniquely identifies the source in the style to which it is added.
tileURLTemplatesAn array of tile URL template strings. Only the first string is used; any additional strings are ignored.
optionsA dictionary containing configuration options. See
MGLTileSourceOptionfor available keys and values. Pass innilto use the default values.Return Value
An initialized tile source.
MGLRasterDEMSource
-
MGLSource
MGLSourceis an abstract base class for map content sources. A map content source supplies content to be shown on the map. A source is added to anMGLStyleobject along with anMGLForegroundStyleLayerobject. The foreground style layer defines the appearance of any content supplied by the source.Each source defined by the style JSON file is represented at runtime by an
MGLSourceobject that you can use to refine the map’s content. You can also add and remove sources dynamically using methods such as-[MGLStyle addSource:]and-[MGLStyle sourceWithIdentifier:].Create instances of
See moreMGLShapeSource,MGLComputedShapeSource,MGLImageSource, and the concrete subclasses ofMGLTileSource(MGLVectorTileSourceandMGLRasterTileSource) in order to useMGLSource’s properties and methods. Do not create instances ofMGLSourcedirectly, and do not create your own subclasses of this class.Declaration
Objective-C
@interface MGLSource : NSObjectSwift
class MGLSource : NSObject -
MGLShapeSource
MGLShapeSourceis a map content source that supplies vector shapes to be shown on the map. The shapes may be instances ofMGLShapeorMGLFeature, or they may be defined by local or external GeoJSON code. A shape source is added to anMGLStyleobject along with anMGLVectorStyleLayerobject. The vector style layer defines the appearance of any content supplied by the shape source. You can update a shape source by setting itsshapeorURLproperty.MGLShapeSourceis optimized for data sets that change dynamically and fit completely in memory. For large data sets that do not fit completely in memory, use theMGLComputedShapeSourceorMGLVectorTileSourceclass.Each
geojsonsource defined by the style JSON file is represented at runtime by anMGLShapeSourceobject that you can use to refine the map’s content and initialize new style layers. You can also add and remove sources dynamically using methods such as-[MGLStyle addSource:]and-[MGLStyle sourceWithIdentifier:].Any vector style layer initialized with a shape source should have a
nilvalue in itssourceLayerIdentifierproperty.Example
var coordinates: [CLLocationCoordinate2D] = [ CLLocationCoordinate2D(latitude: 37.77, longitude: -122.42), CLLocationCoordinate2D(latitude: 38.91, longitude: -77.04), ] let polyline = MGLPolylineFeature(coordinates: &coordinates, count: UInt(coordinates.count)) let source = MGLShapeSource(identifier: "lines", features: [polyline], options: nil) mapView.style?.addSource(source)Related examples
See the Cluster point data, Use images to cluster point data, and Add live data examples to learn how to add data to your map using this
See moreMGLSourceobject. -
MGLComputedShapeSource
MGLComputedShapeSourceis a map content source that supplies vector shapes, one tile at a time, to be shown on the map on demand. You implement a class conforming to theMGLComputedShapeSourceDataSourceprotocol that returns instances ofMGLShapeorMGLFeature, then add a computed shape source to anMGLStyleobject along with anMGLVectorStyleLayerobject. The vector style layer defines the appearance of any content supplied by the computed shape source.MGLComputedShapeSourceis similar toMGLShapeSourcebut is optimized for data sets that change dynamically or are too large to fit completely in memory. It is also useful for data that is divided into tiles in a format other than Mapbox Vector Tiles. For GeoJSON data, use theMGLShapeSourceclass. For static tiles or Mapbox Vector Tiles, use theMGLVectorTileSourceclass.You can add and remove sources dynamically using methods such as
See more-[MGLStyle addSource:]and-[MGLStyle sourceWithIdentifier:]. This class cannot be represented in a style JSON file; you must add it ot the style at runtime. -
MGLTileSource
MGLTileSourceis a map content source that supplies map tiles to be shown on the map. The location of and metadata about the tiles are defined either by an option dictionary or by an external file that conforms to the TileJSON specification. A tile source is added to anMGLStyleobject along with one or moreMGLRasterStyleLayerorMGLVectorStyleLayerobjects. Use a style layer to control the appearance of content supplied by the tile source.A tile source is also known as a tile set. To learn about the structure of a Mapbox-hosted tile set, view it in Mapbox Studio’s Tilesets editor.
Create instances of
See moreMGLRasterTileSourceandMGLVectorTileSourcein order to useMGLTileSource‘s properties and methods. Do not create instances ofMGLTileSourcedirectly, and do not create your own subclasses of this class. -
MGLRasterTileSource
MGLRasterTileSourceis a map content source that supplies raster image tiles to be shown on the map. The location of and metadata about the tiles are defined either by an option dictionary or by an external file that conforms to the TileJSON specification. A raster tile source is added to anMGLStyleobject along with one or moreMGLRasterStyleLayerobjects. Use a raster style layer to control the appearance of content supplied by the raster tile source.Each
rastersource defined by the style JSON file is represented at runtime by anMGLRasterTileSourceobject that you can use to initialize new style layers. You can also add and remove sources dynamically using methods such as-[MGLStyle addSource:]and-[MGLStyle sourceWithIdentifier:].Example
let source = MGLRasterTileSource(identifier: "clouds", tileURLTemplates: ["https://example.com/raster-tiles/{z}/{x}/{y}.png"], options: [ .minimumZoomLevel: 9, .maximumZoomLevel: 16, .tileSize: 512, .attributionInfos: [ MGLAttributionInfo(title: NSAttributedString(string: "© Mapbox"), url: URL(string: "https://mapbox.com")) ] ]) mapView.style?.addSource(source)Related examples
See the Add raster imagery example to learn how to add a
See moreMGLRasterStyleLayerto your map using anMGLRasterTileSource.Declaration
Objective-C
@interface MGLRasterTileSource : MGLTileSourceSwift
class MGLRasterTileSource : MGLTileSource -
MGLRasterDEMSource
MGLRasterDEMSourceis a map content source that supplies rasterized digital elevation model (DEM) tiles to be shown on the map. The location of and metadata about the tiles are defined either by an option dictionary or by an external file that conforms to the TileJSON specification. A raster DEM source is added to anMGLStyleobject along with one or moreMGLHillshadeStyleLayerobjects. Use a hillshade style layer to control the appearance of content supplied by the raster DEM source.Each
raster-demsource defined by the style JSON file is represented at runtime by anMGLRasterDEMSourceobject that you can use to initialize new style layers. You can also add and remove sources dynamically using methods such as-[MGLStyle addSource:]and-[MGLStyle sourceWithIdentifier:].Currently, raster DEM sources only support the format used by Mapbox Terrain-RGB.
Example
let terrainRGBURL = URL(string: "maptiler://sources/terrain-rgb")! let source = MGLRasterDEMSource(identifier: "hills", configurationURL: terrainRGBURL) mapView.style?.addSource(source)Declaration
Objective-C
@interface MGLRasterDEMSource : MGLRasterTileSourceSwift
class MGLRasterDEMSource : MGLRasterTileSource -
MGLVectorTileSource
MGLVectorTileSourceis a map content source that supplies tiled vector data in Mapbox Vector Tile format to be shown on the map. The location of and metadata about the tiles are defined either by an option dictionary or by an external file that conforms to the TileJSON specification. A vector tile source is added to anMGLStyleobject along with one or moreMGLVectorStyleLayerobjects. A vector style layer defines the appearance of any content supplied by the vector tile source.MGLVectorTileSourceis optimized for data sets that are too large to fit completely in memory, such as vector tile sets or data sets managed in Mapbox Studio. For GeoJSON data, use theMGLShapeSourceclass. For tiled data that changes dynamically, theMGLComputedShapeSourceclass may be a suitable alternative.Each
vectorsource defined by the style JSON file is represented at runtime by anMGLVectorTileSourceobject that you can use to initialize new style layers. You can also add and remove sources dynamically using methods such as-[MGLStyle addSource:]and-[MGLStyle sourceWithIdentifier:].Within each vector tile, each geometric coordinate must lie between −1 × extent and (extent × 2) − 1, inclusive. Any vector style layer initialized with a vector tile source must have a non-
nilvalue in itssourceLayerIdentifierproperty.Commonly used vector tile sources include Mapbox Streets, Mapbox Terrain, and Mapbox Traffic.
Example
let source = MGLVectorTileSource(identifier: "pois", tileURLTemplates: ["https://example.com/vector-tiles/{z}/{x}/{y}.mvt"], options: [ .minimumZoomLevel: 9, .maximumZoomLevel: 16, .attributionInfos: [ MGLAttributionInfo(title: NSAttributedString(string: "© Mapbox"), url: URL(string: "https://mapbox.com")) ] ]) mapView.style?.addSource(source)Related examples
See the Data-driven circles example to learn how to add data to your map using an
See moreMGLVectorTileSourceobject.Declaration
Objective-C
@interface MGLVectorTileSource : MGLTileSourceSwift
class MGLVectorTileSource : MGLTileSource -
MGLImageSource
MGLImageSourceis a content source that is used for a georeferenced raster image to be shown on the map. The georeferenced image scales and rotates as the user zooms and rotates the map. Images may also be used as icons or patterns in a style layer. To register an image for use as an icon or pattern, use the-[MGLStyle setImage:forName:]method. To configure a point annotation’s image, use theMGLAnnotationImageclass.The geographic location of the raster image content, supplied with
MGLCoordinateQuad, can be non-axis aligned.MGLImageSourcesupports raster content fromNSURL,NSImage(macOS), orUIImage(iOS). An image source is added to anMGLStyleobject along with one or moreMGLRasterStyleLayerobjects. Use a raster style layer to control the appearance of content supplied by the image source.Each
imagesource defined by the style JSON file is represented at runtime by anMGLImageSourceobject that you can use to initialize new style layers. You can also add and remove sources dynamically using methods such as-[MGLStyle addSource:]and-[MGLStyle sourceWithIdentifier:].Example
let coordinates = MGLCoordinateQuad( topLeft: CLLocationCoordinate2D(latitude: 46.437, longitude: -80.425), bottomLeft: CLLocationCoordinate2D(latitude: 37.936, longitude: -80.425), bottomRight: CLLocationCoordinate2D(latitude: 37.936, longitude: -71.516), topRight: CLLocationCoordinate2D(latitude: 46.437, longitude: -71.516)) let source = MGLImageSource(identifier: "radar", coordinateQuad: coordinates, url: URL(string: "https://maplibre.org/maplibre-gl-js-docs/assets/radar.gif")!) mapView.style?.addSource(source)Related examples
See the Add an image example to learn how to add an image to your map using
See moreMGLImageSource.
MGLVectorTileSource
@interface MGLVectorTileSource : MGLTileSource
MGLVectorTileSource is a map content source that supplies tiled vector data
in Mapbox Vector Tile format
to be shown on the map. The location of and metadata about the tiles are
defined either by an option dictionary or by an external file that conforms to
the
TileJSON specification.
A vector tile source is added to an MGLStyle
object along with one or more
MGLVectorStyleLayer objects. A
vector style layer defines the appearance of
any content supplied by the vector tile source.
MGLVectorTileSource is optimized for data sets that are too large to fit
completely in memory, such as vector tile sets or data sets managed in
Mapbox Studio. For
GeoJSON data, use the
MGLShapeSource
class. For tiled data that changes dynamically, the
MGLComputedShapeSource
class may be a suitable alternative.
Each
vector
source defined by the style JSON file is represented at runtime by an
MGLVectorTileSource object that you can use to initialize new style layers.
You can also add and remove sources dynamically using methods such as
-[MGLStyle addSource:]
and
-[MGLStyle sourceWithIdentifier:].
Within each vector tile, each geometric coordinate must lie between
−1 × extent and
(extent × 2) − 1, inclusive. Any vector style
layer initialized with a vector tile source must have a non-nil value in its
sourceLayerIdentifier property.
Commonly used vector tile sources include Mapbox Streets, Mapbox Terrain, and Mapbox Traffic.
Example
let source = MGLVectorTileSource(identifier: "pois", tileURLTemplates: ["https://example.com/vector-tiles/{z}/{x}/{y}.mvt"], options: [
.minimumZoomLevel: 9,
.maximumZoomLevel: 16,
.attributionInfos: [
MGLAttributionInfo(title: NSAttributedString(string: "© Mapbox"), url: URL(string: "https://mapbox.com"))
]
])
mapView.style?.addSource(source)
Related examples
See the
Data-driven circles example to learn how to add data to your map using
an MGLVectorTileSource object.
Initializing a Source
-
-initWithIdentifier:configurationURL:
Returns a vector tile source initialized with an identifier and configuration URL.
After initializing and configuring the source, add it to a map view’s style using the
-[MGLStyle addSource:]method.The URL may be a full HTTP or HTTPS URL or a canonical URL. The URL should point to a JSON file that conforms to the TileJSON specification.
Declaration
Objective-C
- (nonnull instancetype)initWithIdentifier:(nonnull NSString *)identifier configurationURL:(nonnull NSURL *)configurationURL;Swift
init(identifier: String, configurationURL: URL)Parameters
identifierA string that uniquely identifies the source in the style to which it is added.
configurationURLA URL to a TileJSON configuration file describing the source’s contents and other metadata.
Return Value
An initialized vector tile source.
-
-initWithIdentifier:tileURLTemplates:options:
Returns a vector tile source initialized an identifier, tile URL templates, and options.
Tile URL templates are strings that specify the URLs of the vector tiles to load. See the “Tile URL Templates” guide for information about the format of a tile URL template.
After initializing and configuring the source, add it to a map view’s style using the
-[MGLStyle addSource:]method.Declaration
Objective-C
- (nonnull instancetype) initWithIdentifier:(nonnull NSString *)identifier tileURLTemplates:(nonnull NSArray<NSString *> *)tileURLTemplates options: (nullable NSDictionary<MGLTileSourceOption, id> *)options;Swift
init(identifier: String, tileURLTemplates: [String], options: [MGLTileSourceOption : Any]? = nil)Parameters
identifierA string that uniquely identifies the source in the style to which it is added.
tileURLTemplatesAn array of tile URL template strings. Only the first string is used; any additional strings are ignored.
optionsA dictionary containing configuration options. See
MGLTileSourceOptionfor available keys and values. Pass innilto use the default values.Return Value
An initialized tile source.
Accessing a Source’s Content
-
-featuresInSourceLayersWithIdentifiers:predicate:
Returns an array of map features loaded by this source, restricted to the given source layers and filtered by the given predicate.
Each object in the returned array represents a feature loaded by the source and provides access to attributes specified as part of the loaded feature. The source loads a feature if the source is added to an
MGLMapView’s style; that style has a layer that uses the source; and the map view has recently scrolled to the region containing the feature.Features come from tiled vector data that is converted to tiles internally, so feature geometries are clipped at tile boundaries and features may appear duplicated across tiles. For example, suppose part of a lengthy polyline representing a road has recently scrolled into view. The resulting array includes those parts of the road that lie within the map tiles that the source has loaded, even if the road extends into other tiles. The portion of the road within each map tile is included individually.
Returned features may not necessarily be visible to the user at the time they are loaded: the style may contain a layer that forces the source’s tiles to load but filters out the features in question, preventing them from being drawn. To obtain only visible features, use the
-[MGLMapView visibleFeaturesAtPoint:inStyleLayersWithIdentifiers:predicate:]or-[MGLMapView visibleFeaturesInRect:inStyleLayersWithIdentifiers:predicate:]method.Declaration
Objective-C
- (nonnull NSArray<id<MGLFeature>> *) featuresInSourceLayersWithIdentifiers: (nonnull NSSet<NSString *> *)sourceLayerIdentifiers predicate:(nullable NSPredicate *)predicate;Swift
func features(sourceLayerIdentifiers: Set<String>, predicate: NSPredicate?) -> [MGLFeature]Parameters
sourceLayerIdentifiersThe source layers to include in the query. Only the features contained in these source layers are included in the returned array. This array may not be empty.
predicateA predicate to filter the returned features. Use
nilto include all loaded features.Return Value
An array of objects conforming to the
MGLFeatureprotocol that represent features loaded by the source that match the predicate.
MGLImageSource
@interface MGLImageSource : MGLSource
MGLImageSource is a content source that is used for a georeferenced raster
image to be shown on the map. The georeferenced image scales and rotates as the
user zooms and rotates the map. Images may also be used as icons or patterns
in a style layer. To register an image for use as an icon or pattern,
use the
-[MGLStyle setImage:forName:]
method. To configure a point
annotation’s image, use the
MGLAnnotationImage class.
The geographic location of the raster image content, supplied with
MGLCoordinateQuad, can be non-axis
aligned.
MGLImageSource supports raster content from NSURL,
NSImage (macOS), or
UIImage (iOS).
An image source is added to an MGLStyle
object along with one or more
MGLRasterStyleLayer objects. Use
a raster style layer to control the
appearance of content supplied by the image source.
Each
image
source defined by the style JSON file is represented at runtime by an
MGLImageSource object that you can use to initialize new style layers. You
can also add and remove sources dynamically using methods such as
-[MGLStyle addSource:]
and
-[MGLStyle sourceWithIdentifier:].
Example
let coordinates = MGLCoordinateQuad(
topLeft: CLLocationCoordinate2D(latitude: 46.437, longitude: -80.425),
bottomLeft: CLLocationCoordinate2D(latitude: 37.936, longitude: -80.425),
bottomRight: CLLocationCoordinate2D(latitude: 37.936, longitude: -71.516),
topRight: CLLocationCoordinate2D(latitude: 46.437, longitude: -71.516))
let source = MGLImageSource(identifier: "radar", coordinateQuad: coordinates, url: URL(string: "https://maplibre.org/maplibre-gl-js-docs/assets/radar.gif")!)
mapView.style?.addSource(source)
Related examples
See the
Add an image example to learn how to add an image to your map using
MGLImageSource.
Initializing a Source
-
-initWithIdentifier:coordinateQuad:URL:
Returns a georeferenced image source with an identifier, coordinates and a URL.
Declaration
Objective-C
- (nonnull instancetype)initWithIdentifier:(nonnull NSString *)identifier coordinateQuad:(MGLCoordinateQuad)coordinateQuad URL:(nonnull NSURL *)url;Swift
init(identifier: String, coordinateQuad: MGLCoordinateQuad, url: URL)Parameters
identifierA string that uniquely identifies the source.
coordinateQuadthe top left, top right, bottom right, and bottom left coordinates for the image.
urlAn HTTP(S) URL, absolute file URL, or local file URL relative to the current application’s resource bundle.
Return Value
An initialized shape source.
-
-initWithIdentifier:coordinateQuad:image:
Returns a georeferenced image source with an identifier, coordinates and an image.
Declaration
Objective-C
- (nonnull instancetype)initWithIdentifier:(nonnull NSString *)identifier coordinateQuad:(MGLCoordinateQuad)coordinateQuad image:(nonnull UIImage *)image;Swift
init(identifier: String, coordinateQuad: MGLCoordinateQuad, image: UIImage)Parameters
identifierA string that uniquely identifies the source.
coordinateQuadThe top left, top right, bottom right, and bottom left coordinates for the image.
imageThe image to display for the source.
Return Value
An initialized shape source.
Accessing a Source’s Content
-
URL
The URL to the source image.
If the receiver was initialized using
-initWithIdentifier:coordinateQuad:image:or theimageproperty is set, this property is set tonil.Declaration
Objective-C
@property (nonatomic, copy, nullable) NSURL *URL;Swift
var url: URL? { get set } -
image
The source image.
If the receiver was initialized using
-initWithIdentifier:coordinateQuad:URL:or if theURLproperty is set, this property is set tonil.Declaration
Objective-C
@property (nonatomic, retain, nullable) UIImage *image;Swift
var image: UIImage? { get set } -
coordinates
The coordinates at which the corners of the source image will be placed.
Declaration
Objective-C
@property (nonatomic) MGLCoordinateQuad coordinates;Swift
var coordinates: MGLCoordinateQuad { get set }